package com.soulsdk.demo;

import java.util.Map;

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

import com.soul.sdk.SGProxy;
import com.soul.sdk.constants.UserMapKey;
import com.soul.sdk.plugin.ads.AdsProxy;
import com.soul.sdk.plugin.pay.IPayCallBack;
import com.soul.sdk.plugin.pay.PayParams;
import com.soul.sdk.plugin.pay.PayProxy;
import com.soul.sdk.plugin.user.IExitListener;
import com.soul.sdk.plugin.user.IUserListener;
import com.soul.sdk.plugin.user.UserInfos;
import com.soul.sdk.plugin.user.UserProxy;
import com.soul.sdk.utils.OrderIdUtils;
import com.soul.sdk.utils.SGDebug;
import com.soul.sdk.utils.ToastUtil;

public class MainActivity extends Activity {

	private Activity mActivity;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
//		this.setContentView(R.layout.pay_external);
		int id = this.getResources().getIdentifier("pay_external", "layout", this.getPackageName());
		this.setContentView(id);
		this.mActivity = this;

		// isLandscape 是否横屏，否则竖屏，isOnlineGame 是否网游，否则单机；pUserListener用户操作相关回调。
		// SGProxy.getInstance().init(pActivity, isLandscape, isOnlineGame,
		// pUserListener);
		SGProxy.getInstance().init(this, true, false, pUserListener);
		// 因为有些渠道SDK一进入游戏 就有自动登录的情况，所以 pUserListener 一开始就设置好。
		// 另外还有不带 pUserListener参数的接口，可以通过
		// SGProxy.getInstance().setUserListener(pUserListener)设置
		// SGProxy.getInstance().init(pActivity, isLandscape, isOnlineGame);
		// SGProxy.getInstance().setUserListener(pUserListener);

		SGProxy.getInstance().onCreate(savedInstanceState);

		// String tem = "c175ebd531e9d74ccf8a06d7e4e10a08" + "#" +
		// "0d6b50fa50c3065a145254d1f4d01d9c";
		// SGDebug.w("temMd5=" + MD5Utils.getMD5String(tem));
		//
		// SGDebug.d("temMd52=" + Md5Util.md5(tem));

		// 初始化广告SDK
		// AdsProxy.getInstance().initAds(this);

	}

	private IUserListener pUserListener = new IUserListener() {

		@Override
		public void onLoginSuccess(UserInfos pUserInfos, Map<String, String> customParams) {
			SGDebug.w("返回到游戏端  onLoginSuccess");
			SGDebug.v("pUserInfos=" + pUserInfos);

		}

		@Override
		public void onLoginFail(int errorCode, String reason, Map<String, String> customParams) {
			SGDebug.w("返回到游戏端  onLoginFail");

		}

		@Override
		public void onLogout(boolean isSuccess) {
			SGDebug.w("返回到游戏端  onLogout isSuccess:" + isSuccess);

		}
	};

	public void btn1(View pView) {
		SGDebug.d("onclick btn1");
		// 登录
		// UserProxy.getInstance().login(pActivity);
		// UserProxy.getInstance().login(pActivity, customParams)
		// customParams 为自定义参数，支付回调原样返回
		// UserProxy.getInstance().login(this, null);

		// AdsProxy.getInstance().showWithScene("BannerInGame");

		VoCpServerConfig voCpServerConfig = new VoCpServerConfig();

	}

	public void btn2(View pView) {
		SGDebug.d("onclick btn2");

		// 切换帐号
		// UserProxy.getInstance().switchLogin(this);
		// UserProxy.getInstance().switchLogin(pActivity, customParams)
		// customParams 为自定义参数，支付回调原样返回
		// UserProxy.getInstance().switchLogin(this, null);

		// AdsProxy.getInstance().showWithScene("GamePauseIn");

	}

	public void btn3(View pView) {
		SGDebug.d("onclick btn3");

		PayParams pPayParams = new PayParams();
		pPayParams.setAppOrderId(OrderIdUtils.createOrderId(20));
		// 金额，单位 分，注意，部分渠道 只有整元的价格，即100的整数倍，需要传非整元时需咨询下。
		pPayParams.setPrice("100");
		pPayParams.setProductId("101");
		pPayParams.setProductName("测试");
		pPayParams.setProductDesc("测试描述");
		pPayParams.setUserId("10001");
		pPayParams.setUserName("roger");
		pPayParams.setAppExtension("abcdefg");

		PayProxy.getInstance().pay(this, pPayParams, pPayCallBack);

	}

	public void btn4(View pView) {
		SGDebug.d("onclick btn4");
		// 退出
		// this.exitGame();
		AdsProxy.getInstance().hideWithScene("BannerInGame");
		AdsProxy.getInstance().hideWithScene("GamePauseIn");
	}

	public void btn5(View pView) {
		SGDebug.d("onclick btn5");
		// 更多游戏，目前是 爱游戏官方包有用到
		UserProxy.getInstance().moreGame(this);
	}

	private void exitGame() {
		/*
		 * ① 有渠道SDK退出弹框 并且 有短代SDK退出弹框的情况（目前还没有需要有同时两个短代SDK退出弹框的情况）
		 * 方案：先弹“渠道退出框”，玩家点击确定退出后再弹“短代退出框”，点击确认后退出游戏完成退出。
		 */
		// 退出
		UserProxy.getInstance().exit(this, null, new IExitListener() {

			@Override
			public void onExit(Map<String, String> pParams) {

				SGDebug.d("退出回调到游戏端");

				if (pParams != null) {
					if ("true".equalsIgnoreCase(pParams.get(UserMapKey.IS_CONTAIN_EXIT_DIALOG))) {
						// 已经存在了退出对话框（指的是渠道或者短代SDK），游戏无需再弹退出对话框。直接退出游戏即可
						MainActivity.this.finish();
					} else {
						// 渠道不存在退出界面，游戏可以弹出退出框
						// 回调中弹出自己的游戏退出确认界面，然后再进行退出逻辑
						showExitDialog();
					}
				} else {
					showExitDialog();
				}

			}

		});

		/*
		 * //UserProxy.getInstance().isHasExitDialog(); 还有一种情况是，游戏方希望一调用
		 * exit方法则立马同步返回是否SDK本身已经存在退出对话框，否则游戏方弹窗，此时可以调用方法：
		 * UserProxy.getInstance().isHasExitDialog()：SDK是否已经存在退出对话框，true
		 * 表示存在，游戏不用弹窗，false表示没有退出弹框需游戏端弹框。 但这需要我们在接入渠道SDK 或者 短代SDK 时，如果他们存在SDK
		 * 有退出弹框的情况 就设置一下 UserProxy. getInstance().setHasExitDialog(true)
		 */

	}

	private void showExitDialog() {

		PackageManager pm = this.getPackageManager();
		String appName = this.getApplicationInfo().loadLabel(pm).toString();
		Builder builder = new Builder(this);
		if (appName != null) {
			builder.setTitle(appName);
		}
		builder.setMessage("确定退出游戏？");
		builder.setIcon(android.R.drawable.ic_dialog_info);
		builder.setPositiveButton("确定", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {

				// 有些SDK可能会在onDestroy()里处理一些退出前的事情，
				// 要确保onDestroy()生命周期正常调用，直接finish()即可；
				// 如需System.exit(0)、killProcess等退直接杀死的出方式应在onDestroy()最后面调用。
				MainActivity.this.finish();
			}
		});
		builder.setNegativeButton("取消", null).show();

	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			this.exitGame();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	private IPayCallBack pPayCallBack = new IPayCallBack() {

		@Override
		public void onSuccess(int resultCode, String sucessInfo, PayParams pPayParams) {
			ToastUtil.showShort(MainActivity.this, "返回到游戏端 :" + sucessInfo);
		}

		@Override
		public void onFail(int errorCode, String failInfo, PayParams pPayParams) {
			ToastUtil.showShort(MainActivity.this, "返回到游戏端 :" + failInfo);
		}

	};

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		SGProxy.getInstance().onActivityResult(requestCode, resultCode, data);
	}

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		SGProxy.getInstance().onNewIntent(intent);
	}

	@Override
	protected void onStart() {
		super.onStart();
		SGProxy.getInstance().onStart();
	}

	@Override
	protected void onRestart() {
		super.onRestart();
		SGProxy.getInstance().onRestart();
	}

	@Override
	protected void onResume() {
		super.onResume();
		SGProxy.getInstance().onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		SGProxy.getInstance().onPause();
	}

	@Override
	protected void onStop() {
		super.onStop();
		SGProxy.getInstance().onStop();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		SGDebug.e(this, "onDestroy");
		// 有些SDK可能会在 onDestroy()里处理一些退出前的事情，
		// 要确保onDestroy()生命周期正常调用，如需System.exit(0)、killProcess等退直接杀死的出方式应在onDestroy()最后面调用。
		SGProxy.getInstance().onDestroy();
		android.os.Process.killProcess(android.os.Process.myPid());
	}

}
